/**
 * WangSong 2009-6-5 上午11:52:44 2.0 修改cssId、cssWidth为常量,增加按钮只读类型
 */
package cn.biplam.front.template.base;

import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlButton;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.html.base.Const.Window_Event;
import cn.biplam.front.template.Template;

/**
 * 按钮控件
 * @author XiaoRuxing
 * @version 2.0
 */
public class Button implements Template{

	public enum Button_Type{
		/** 只读,不可点击*/
		ReadOnly,
		/** 可点击*/
		Click;
	}
	private HtmlButton button;
	private HtmlDiv div;
	/** 按钮类型 只读/可点击*/
	private Button_Type buttonType=Button_Type.Click;
	/** 文字字符数 */
	private int length=0;
	/** cssID */
	private final String cssID="bt";
	private final String cssReadOnlyID="bt_readonley";
	/** css所占宽度 */
	private final int cssWidth=7;
	private String onClick=null;
	/** 提示内容 */
	private String sTitle = null;


	/**
	 * 传入按钮文本初始化
	 * @param text 按钮文本
	 * @throws ErrorMessage 
	 */
	public Button(String text) throws ErrorMessage{
		this(text,null);
	}

	/**
	 * 构造函数
	 * @param ID    按钮ID
	 * @param text  按钮文本
	 * @throws ErrorMessage 
	 */
	public Button(String text,String ID) throws ErrorMessage{
		this(ID,text,Button_Type.Click);
	}

	/**
	 * 构造函数
	 * @param ID    		按钮ID
	 * @param text  		按钮文本
	 * @param buttonType	按钮类型 只读/可点击
	 * @throws ErrorMessage 
	 */
	public Button(String ID,String text,Button_Type buttonType) throws ErrorMessage{
		this(ID,text,buttonType,null);
	}

	/**
	 * 创建按钮控件
	 * @param ID               页面ID
	 * @param text			   按钮文本
	 * @param buttonType       按钮类型
	 * @param sTitle		   按钮提示文本
	 * @throws ErrorMessage
	 */
	public Button(String ID,String text,Button_Type buttonType,String sTitle) throws ErrorMessage{
		switch(buttonType){
		case Click:
			this.div=new HtmlDiv(ID,cssID);
			break;
		case ReadOnly:
			this.div=new HtmlDiv(ID,cssReadOnlyID);
		}
		this.button=new HtmlButton(null,"btt",text);
		this.length=TOOLS.getTextLength(text);
		this.buttonType=buttonType;
		this.sTitle = sTitle;
	}

	/**
	 * 构造函数
	 * @param text  		按钮文本
	 * @param ID    		按钮ID
	 * @param onClick		点击脚本
	 * @throws ErrorMessage 
	 */
	public Button(String ID,String text,String onClick) throws ErrorMessage{
		this(ID,text,Button_Type.Click);
		this.setOnClick(onClick);
	}


	/**
	 * 设置按钮宽度，避免因为onmouseover加粗显示导致后面内容移位
	 * @throws ErrorMessage 
	 * @throws ErrorMessage
	 */
	private void _setWidth() throws ErrorMessage{
		int px=this.length+cssWidth;
		this.div.setLength(px);
		this.div.setStyleWidth(Integer.toString(px));
	}

	/**
	 * 设置点击脚本命令
	 * @param sScript	点击时的执行脚本
	 */
	public void setOnClick(String sScript){
		this.onClick=sScript;
	}

	/**
	 * 获取对象
	 * @return	getPxLengthNorm
	 * @throws ErrorMessage
	 */
	public HtmlWindow get() throws ErrorMessage{
		this._setWidth();
		switch(buttonType){
		case Click:
			if(this.onClick!=null){
				div.bind(Window_Event.OnClick, this.onClick);
			}
			break;
		}
		div.bind(Window_Event.OnmouseOver, "bo(this);");
		this.div.put(button);
		this.div.setTitle(this.sTitle);
		return this.div;
	}
}
